/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package ms.jasim.model.event.impl;

import ms.jasim.model.ModelPackage;
import ms.jasim.model.event.AbsoluteTime;
import ms.jasim.model.event.ActionRelativeTime;
import ms.jasim.model.event.ActionType;
import ms.jasim.model.event.CompositePrecondition;
import ms.jasim.model.event.CompositeType;
import ms.jasim.model.event.CustomReaction;
import ms.jasim.model.event.Event;
import ms.jasim.model.event.EventFactory;
import ms.jasim.model.event.EventModel;
import ms.jasim.model.event.EventPackage;
import ms.jasim.model.event.EventPrecondition;
import ms.jasim.model.event.EventReaction;
import ms.jasim.model.event.EventRelativeTime;
import ms.jasim.model.event.EventSet;
import ms.jasim.model.event.ForAllDomain;
import ms.jasim.model.event.ForAllGoalDomain;
import ms.jasim.model.event.ForAllReaction;
import ms.jasim.model.event.GoalSource;
import ms.jasim.model.event.ModifiablePredicate;
import ms.jasim.model.event.ModificationType;
import ms.jasim.model.event.ModifyModelReaction;
import ms.jasim.model.event.ModifyObjectReaction;
import ms.jasim.model.event.PropertyModificationType;
import ms.jasim.model.event.ReactionList;
import ms.jasim.model.event.ReplanReaction;
import ms.jasim.model.event.SolutionInconsistent;
import ms.jasim.model.impl.ModelPackageImpl;
import ms.jasim.model.items.ItemsPackage;
import ms.jasim.model.items.impl.ItemsPackageImpl;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EGenericType;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.impl.EPackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class EventPackageImpl extends EPackageImpl implements EventPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eventModelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eventSetEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eventEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eventPreconditionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass absoluteTimeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eventRelativeTimeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass actionRelativeTimeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass solutionInconsistentEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass compositePreconditionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass reactionListEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eventReactionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass modifyModelReactionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass modifyObjectReactionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass replanReactionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass forAllReactionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass forAllDomainEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass forAllGoalDomainEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass customReactionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum compositeTypeEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum goalSourceEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum actionTypeEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum modificationTypeEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum modifiablePredicateEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum propertyModificationTypeEEnum = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see ms.jasim.model.event.EventPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private EventPackageImpl() {
		super(eNS_URI, EventFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link EventPackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static EventPackage init() {
		if (isInited) return (EventPackage)EPackage.Registry.INSTANCE.getEPackage(EventPackage.eNS_URI);

		// Obtain or create and register package
		EventPackageImpl theEventPackage = (EventPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof EventPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new EventPackageImpl());

		isInited = true;

		// Obtain or create and register interdependencies
		ModelPackageImpl theModelPackage = (ModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) instanceof ModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI) : ModelPackage.eINSTANCE);
		ItemsPackageImpl theItemsPackage = (ItemsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ItemsPackage.eNS_URI) instanceof ItemsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ItemsPackage.eNS_URI) : ItemsPackage.eINSTANCE);

		// Create package meta-data objects
		theEventPackage.createPackageContents();
		theModelPackage.createPackageContents();
		theItemsPackage.createPackageContents();

		// Initialize created meta-data
		theEventPackage.initializePackageContents();
		theModelPackage.initializePackageContents();
		theItemsPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theEventPackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(EventPackage.eNS_URI, theEventPackage);
		return theEventPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEventModel() {
		return eventModelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEventModel_EventSet() {
		return (EReference)eventModelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEventSet() {
		return eventSetEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEventSet_Event() {
		return (EReference)eventSetEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEventSet_MaxBranches() {
		return (EAttribute)eventSetEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEventSet_MaxCpuTime() {
		return (EAttribute)eventSetEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEventSet_Enabled() {
		return (EAttribute)eventSetEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEvent() {
		return eventEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEvent_Precondition() {
		return (EReference)eventEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEvent_Parameters() {
		return (EReference)eventEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEvent_Postcondition() {
		return (EReference)eventEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEvent_Enabled() {
		return (EAttribute)eventEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEvent_HappenOnce() {
		return (EAttribute)eventEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEvent_Label() {
		return (EAttribute)eventEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEventPrecondition() {
		return eventPreconditionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAbsoluteTime() {
		return absoluteTimeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAbsoluteTime_Time() {
		return (EAttribute)absoluteTimeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEventRelativeTime() {
		return eventRelativeTimeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEventRelativeTime_TimeOffset() {
		return (EAttribute)eventRelativeTimeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEventRelativeTime_Event() {
		return (EReference)eventRelativeTimeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getActionRelativeTime() {
		return actionRelativeTimeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getActionRelativeTime_TimeOffset() {
		return (EAttribute)actionRelativeTimeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getActionRelativeTime_Action() {
		return (EAttribute)actionRelativeTimeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getActionRelativeTime_Actor() {
		return (EReference)actionRelativeTimeEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getActionRelativeTime_Goal() {
		return (EReference)actionRelativeTimeEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSolutionInconsistent() {
		return solutionInconsistentEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCompositePrecondition() {
		return compositePreconditionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getCompositePrecondition_Type() {
		return (EAttribute)compositePreconditionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCompositePrecondition_Condition() {
		return (EReference)compositePreconditionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getReactionList() {
		return reactionListEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getReactionList_Reaction() {
		return (EReference)reactionListEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEventReaction() {
		return eventReactionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEventReaction_Owner() {
		return (EReference)eventReactionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getModifyModelReaction() {
		return modifyModelReactionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getModifyModelReaction_Type() {
		return (EAttribute)modifyModelReactionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getModifyModelReaction_Predicate() {
		return (EAttribute)modifyModelReactionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getModifyModelReaction_PredicateArg() {
		return (EAttribute)modifyModelReactionEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getModifyModelReaction_Negative() {
		return (EAttribute)modifyModelReactionEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getModifyObjectReaction() {
		return modifyObjectReactionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getModifyObjectReaction_ObjectVariable() {
		return (EAttribute)modifyObjectReactionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getModifyObjectReaction_NewValueVariable() {
		return (EAttribute)modifyObjectReactionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getModifyObjectReaction_Action() {
		return (EAttribute)modifyObjectReactionEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getModifyObjectReaction_Property() {
		return (EReference)modifyObjectReactionEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getModifyObjectReaction_DescriptorName() {
		return (EAttribute)modifyObjectReactionEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getModifyObjectReaction_DescriptorClass() {
		return (EAttribute)modifyObjectReactionEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getReplanReaction() {
		return replanReactionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getForAllReaction() {
		return forAllReactionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getForAllReaction_Domain() {
		return (EReference)forAllReactionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getForAllReaction_Actions() {
		return (EReference)forAllReactionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getForAllDomain() {
		return forAllDomainEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getForAllGoalDomain() {
		return forAllGoalDomainEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getForAllGoalDomain_Actor() {
		return (EAttribute)forAllGoalDomainEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getForAllGoalDomain_Source() {
		return (EAttribute)forAllGoalDomainEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCustomReaction() {
		return customReactionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCustomReaction_Params() {
		return (EReference)customReactionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getCustomReaction_Clazz() {
		return (EAttribute)customReactionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getCompositeType() {
		return compositeTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getGoalSource() {
		return goalSourceEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getActionType() {
		return actionTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getModificationType() {
		return modificationTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getModifiablePredicate() {
		return modifiablePredicateEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getPropertyModificationType() {
		return propertyModificationTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EventFactory getEventFactory() {
		return (EventFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		eventModelEClass = createEClass(EVENT_MODEL);
		createEReference(eventModelEClass, EVENT_MODEL__EVENT_SET);

		eventSetEClass = createEClass(EVENT_SET);
		createEReference(eventSetEClass, EVENT_SET__EVENT);
		createEAttribute(eventSetEClass, EVENT_SET__MAX_BRANCHES);
		createEAttribute(eventSetEClass, EVENT_SET__MAX_CPU_TIME);
		createEAttribute(eventSetEClass, EVENT_SET__ENABLED);

		eventEClass = createEClass(EVENT);
		createEReference(eventEClass, EVENT__PRECONDITION);
		createEReference(eventEClass, EVENT__PARAMETERS);
		createEReference(eventEClass, EVENT__POSTCONDITION);
		createEAttribute(eventEClass, EVENT__ENABLED);
		createEAttribute(eventEClass, EVENT__HAPPEN_ONCE);
		createEAttribute(eventEClass, EVENT__LABEL);

		eventPreconditionEClass = createEClass(EVENT_PRECONDITION);

		absoluteTimeEClass = createEClass(ABSOLUTE_TIME);
		createEAttribute(absoluteTimeEClass, ABSOLUTE_TIME__TIME);

		eventRelativeTimeEClass = createEClass(EVENT_RELATIVE_TIME);
		createEAttribute(eventRelativeTimeEClass, EVENT_RELATIVE_TIME__TIME_OFFSET);
		createEReference(eventRelativeTimeEClass, EVENT_RELATIVE_TIME__EVENT);

		actionRelativeTimeEClass = createEClass(ACTION_RELATIVE_TIME);
		createEAttribute(actionRelativeTimeEClass, ACTION_RELATIVE_TIME__TIME_OFFSET);
		createEAttribute(actionRelativeTimeEClass, ACTION_RELATIVE_TIME__ACTION);
		createEReference(actionRelativeTimeEClass, ACTION_RELATIVE_TIME__ACTOR);
		createEReference(actionRelativeTimeEClass, ACTION_RELATIVE_TIME__GOAL);

		solutionInconsistentEClass = createEClass(SOLUTION_INCONSISTENT);

		compositePreconditionEClass = createEClass(COMPOSITE_PRECONDITION);
		createEAttribute(compositePreconditionEClass, COMPOSITE_PRECONDITION__TYPE);
		createEReference(compositePreconditionEClass, COMPOSITE_PRECONDITION__CONDITION);

		reactionListEClass = createEClass(REACTION_LIST);
		createEReference(reactionListEClass, REACTION_LIST__REACTION);

		eventReactionEClass = createEClass(EVENT_REACTION);
		createEReference(eventReactionEClass, EVENT_REACTION__OWNER);

		modifyModelReactionEClass = createEClass(MODIFY_MODEL_REACTION);
		createEAttribute(modifyModelReactionEClass, MODIFY_MODEL_REACTION__TYPE);
		createEAttribute(modifyModelReactionEClass, MODIFY_MODEL_REACTION__PREDICATE);
		createEAttribute(modifyModelReactionEClass, MODIFY_MODEL_REACTION__PREDICATE_ARG);
		createEAttribute(modifyModelReactionEClass, MODIFY_MODEL_REACTION__NEGATIVE);

		modifyObjectReactionEClass = createEClass(MODIFY_OBJECT_REACTION);
		createEAttribute(modifyObjectReactionEClass, MODIFY_OBJECT_REACTION__OBJECT_VARIABLE);
		createEAttribute(modifyObjectReactionEClass, MODIFY_OBJECT_REACTION__NEW_VALUE_VARIABLE);
		createEAttribute(modifyObjectReactionEClass, MODIFY_OBJECT_REACTION__ACTION);
		createEReference(modifyObjectReactionEClass, MODIFY_OBJECT_REACTION__PROPERTY);
		createEAttribute(modifyObjectReactionEClass, MODIFY_OBJECT_REACTION__DESCRIPTOR_NAME);
		createEAttribute(modifyObjectReactionEClass, MODIFY_OBJECT_REACTION__DESCRIPTOR_CLASS);

		replanReactionEClass = createEClass(REPLAN_REACTION);

		forAllReactionEClass = createEClass(FOR_ALL_REACTION);
		createEReference(forAllReactionEClass, FOR_ALL_REACTION__DOMAIN);
		createEReference(forAllReactionEClass, FOR_ALL_REACTION__ACTIONS);

		forAllDomainEClass = createEClass(FOR_ALL_DOMAIN);

		forAllGoalDomainEClass = createEClass(FOR_ALL_GOAL_DOMAIN);
		createEAttribute(forAllGoalDomainEClass, FOR_ALL_GOAL_DOMAIN__ACTOR);
		createEAttribute(forAllGoalDomainEClass, FOR_ALL_GOAL_DOMAIN__SOURCE);

		customReactionEClass = createEClass(CUSTOM_REACTION);
		createEReference(customReactionEClass, CUSTOM_REACTION__PARAMS);
		createEAttribute(customReactionEClass, CUSTOM_REACTION__CLAZZ);

		// Create enums
		compositeTypeEEnum = createEEnum(COMPOSITE_TYPE);
		goalSourceEEnum = createEEnum(GOAL_SOURCE);
		actionTypeEEnum = createEEnum(ACTION_TYPE);
		modificationTypeEEnum = createEEnum(MODIFICATION_TYPE);
		modifiablePredicateEEnum = createEEnum(MODIFIABLE_PREDICATE);
		propertyModificationTypeEEnum = createEEnum(PROPERTY_MODIFICATION_TYPE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Obtain other dependent packages
		ModelPackage theModelPackage = (ModelPackage)EPackage.Registry.INSTANCE.getEPackage(ModelPackage.eNS_URI);
		ItemsPackage theItemsPackage = (ItemsPackage)EPackage.Registry.INSTANCE.getEPackage(ItemsPackage.eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		eventModelEClass.getESuperTypes().add(theModelPackage.getModelObject());
		eventSetEClass.getESuperTypes().add(theModelPackage.getNamedModelObject());
		eventEClass.getESuperTypes().add(theModelPackage.getNamedModelObject());
		eventPreconditionEClass.getESuperTypes().add(theModelPackage.getModelObject());
		eventPreconditionEClass.getESuperTypes().add(theModelPackage.getIValueProvider());
		absoluteTimeEClass.getESuperTypes().add(this.getEventPrecondition());
		eventRelativeTimeEClass.getESuperTypes().add(this.getEventPrecondition());
		actionRelativeTimeEClass.getESuperTypes().add(this.getEventPrecondition());
		solutionInconsistentEClass.getESuperTypes().add(this.getEventPrecondition());
		compositePreconditionEClass.getESuperTypes().add(this.getEventPrecondition());
		reactionListEClass.getESuperTypes().add(theModelPackage.getNamedModelObject());
		eventReactionEClass.getESuperTypes().add(theModelPackage.getNamedModelObject());
		modifyModelReactionEClass.getESuperTypes().add(this.getEventReaction());
		modifyObjectReactionEClass.getESuperTypes().add(this.getEventReaction());
		replanReactionEClass.getESuperTypes().add(this.getEventReaction());
		forAllReactionEClass.getESuperTypes().add(this.getReplanReaction());
		forAllDomainEClass.getESuperTypes().add(theModelPackage.getModelObject());
		forAllDomainEClass.getESuperTypes().add(theModelPackage.getIValueProvider());
		forAllGoalDomainEClass.getESuperTypes().add(this.getForAllDomain());
		customReactionEClass.getESuperTypes().add(this.getEventReaction());

		// Initialize classes and features; add operations and parameters
		initEClass(eventModelEClass, EventModel.class, "EventModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEventModel_EventSet(), this.getEventSet(), null, "eventSet", null, 0, -1, EventModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eventSetEClass, EventSet.class, "EventSet", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEventSet_Event(), this.getEvent(), null, "event", null, 0, -1, EventSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEventSet_MaxBranches(), ecorePackage.getEInt(), "MaxBranches", "1", 0, 1, EventSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEventSet_MaxCpuTime(), ecorePackage.getEInt(), "MaxCpuTime", "999", 0, 1, EventSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEventSet_Enabled(), ecorePackage.getEBoolean(), "Enabled", "true", 0, 1, EventSet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eventEClass, Event.class, "Event", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEvent_Precondition(), this.getEventPrecondition(), null, "precondition", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEvent_Parameters(), theItemsPackage.getItemList(), null, "parameters", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEvent_Postcondition(), this.getReactionList(), null, "postcondition", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEvent_Enabled(), ecorePackage.getEBoolean(), "Enabled", "true", 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEvent_HappenOnce(), ecorePackage.getEBoolean(), "HappenOnce", "true", 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEvent_Label(), ecorePackage.getEString(), "Label", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		EOperation op = addEOperation(eventEClass, ecorePackage.getEBoolean(), "react", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, theModelPackage.getJasimAppContext(), "context", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, theModelPackage.getJasimModel(), "model", 0, 1, IS_UNIQUE, IS_ORDERED);

		op = addEOperation(eventEClass, ecorePackage.getEJavaObject(), "getParameterValue", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, theModelPackage.getJasimAppContext(), "context", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, ecorePackage.getEString(), "paramName", 0, 1, IS_UNIQUE, !IS_ORDERED);

		initEClass(eventPreconditionEClass, EventPrecondition.class, "EventPrecondition", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		op = addEOperation(eventPreconditionEClass, ecorePackage.getEBoolean(), "conditionMatch", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, theModelPackage.getJasimAppContext(), "context", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, theModelPackage.getSimulatorArg(), "simulatorInfo", 0, 1, IS_UNIQUE, IS_ORDERED);

		initEClass(absoluteTimeEClass, AbsoluteTime.class, "AbsoluteTime", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAbsoluteTime_Time(), ecorePackage.getEInt(), "Time", null, 0, 1, AbsoluteTime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eventRelativeTimeEClass, EventRelativeTime.class, "EventRelativeTime", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEventRelativeTime_TimeOffset(), ecorePackage.getEInt(), "TimeOffset", null, 0, 1, EventRelativeTime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEventRelativeTime_Event(), this.getEvent(), null, "Event", null, 0, 1, EventRelativeTime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(actionRelativeTimeEClass, ActionRelativeTime.class, "ActionRelativeTime", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getActionRelativeTime_TimeOffset(), ecorePackage.getEInt(), "TimeOffset", null, 0, 1, ActionRelativeTime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getActionRelativeTime_Action(), this.getActionType(), "Action", null, 0, 1, ActionRelativeTime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getActionRelativeTime_Actor(), theModelPackage.getActor(), null, "actor", null, 0, 1, ActionRelativeTime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getActionRelativeTime_Goal(), theModelPackage.getGoal(), null, "goal", null, 0, 1, ActionRelativeTime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(solutionInconsistentEClass, SolutionInconsistent.class, "SolutionInconsistent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(compositePreconditionEClass, CompositePrecondition.class, "CompositePrecondition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getCompositePrecondition_Type(), this.getCompositeType(), "Type", null, 0, 1, CompositePrecondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCompositePrecondition_Condition(), this.getEventPrecondition(), null, "condition", null, 0, -1, CompositePrecondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(reactionListEClass, ReactionList.class, "ReactionList", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getReactionList_Reaction(), this.getEventReaction(), this.getEventReaction_Owner(), "reaction", null, 0, -1, ReactionList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eventReactionEClass, EventReaction.class, "EventReaction", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEventReaction_Owner(), this.getReactionList(), this.getReactionList_Reaction(), "owner", null, 0, 1, EventReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		op = addEOperation(eventReactionEClass, ecorePackage.getEBoolean(), "react", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, theModelPackage.getJasimAppContext(), "context", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, theModelPackage.getJasimModel(), "model", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getEvent(), "event", 0, 1, IS_UNIQUE, IS_ORDERED);

		initEClass(modifyModelReactionEClass, ModifyModelReaction.class, "ModifyModelReaction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getModifyModelReaction_Type(), this.getModificationType(), "Type", null, 0, 1, ModifyModelReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getModifyModelReaction_Predicate(), this.getModifiablePredicate(), "Predicate", null, 0, 1, ModifyModelReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getModifyModelReaction_PredicateArg(), ecorePackage.getEString(), "PredicateArg", "{Actor} {Goal}", 0, 1, ModifyModelReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getModifyModelReaction_Negative(), ecorePackage.getEBoolean(), "Negative", null, 0, 1, ModifyModelReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		op = addEOperation(modifyModelReactionEClass, theModelPackage.getPddlPredicate(), "getPddlPredicate", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, theModelPackage.getJasimAppContext(), "context", 0, 1, IS_UNIQUE, IS_ORDERED);

		initEClass(modifyObjectReactionEClass, ModifyObjectReaction.class, "ModifyObjectReaction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getModifyObjectReaction_ObjectVariable(), ecorePackage.getEString(), "ObjectVariable", "Actor", 0, 1, ModifyObjectReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getModifyObjectReaction_NewValueVariable(), ecorePackage.getEString(), "newValueVariable", "NewValue", 0, 1, ModifyObjectReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getModifyObjectReaction_Action(), this.getPropertyModificationType(), "Action", null, 0, 1, ModifyObjectReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getModifyObjectReaction_Property(), theItemsPackage.getPropertyDescriptor(), null, "property", null, 0, 1, ModifyObjectReaction.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
		initEAttribute(getModifyObjectReaction_DescriptorName(), ecorePackage.getEString(), "descriptorName", null, 0, 1, ModifyObjectReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		EGenericType g1 = createEGenericType(ecorePackage.getEJavaClass());
		EGenericType g2 = createEGenericType();
		g1.getETypeArguments().add(g2);
		initEAttribute(getModifyObjectReaction_DescriptorClass(), g1, "descriptorClass", null, 0, 1, ModifyObjectReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(replanReactionEClass, ReplanReaction.class, "ReplanReaction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(forAllReactionEClass, ForAllReaction.class, "ForAllReaction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getForAllReaction_Domain(), this.getForAllDomain(), null, "domain", null, 0, 1, ForAllReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getForAllReaction_Actions(), this.getReactionList(), null, "actions", null, 0, 1, ForAllReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(forAllDomainEClass, ForAllDomain.class, "ForAllDomain", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		op = addEOperation(forAllDomainEClass, null, "initialize", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, theModelPackage.getJasimAppContext(), "context", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getEvent(), "event", 0, 1, IS_UNIQUE, IS_ORDERED);

		addEOperation(forAllDomainEClass, ecorePackage.getEBoolean(), "moveNext", 0, 1, IS_UNIQUE, IS_ORDERED);

		addEOperation(forAllDomainEClass, null, "next", 0, 1, IS_UNIQUE, IS_ORDERED);

		initEClass(forAllGoalDomainEClass, ForAllGoalDomain.class, "ForAllGoalDomain", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getForAllGoalDomain_Actor(), ecorePackage.getEString(), "Actor", "Actor", 0, 1, ForAllGoalDomain.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getForAllGoalDomain_Source(), this.getGoalSource(), "Source", null, 0, 1, ForAllGoalDomain.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(customReactionEClass, CustomReaction.class, "CustomReaction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCustomReaction_Params(), theItemsPackage.getItem(), null, "params", null, 0, -1, CustomReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getCustomReaction_Clazz(), ecorePackage.getEString(), "clazz", null, 0, 1, CustomReaction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		op = addEOperation(customReactionEClass, ecorePackage.getEJavaObject(), "getParamValue", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, ecorePackage.getEString(), "paramName", 0, 1, IS_UNIQUE, IS_ORDERED);

		// Initialize enums and add enum literals
		initEEnum(compositeTypeEEnum, CompositeType.class, "CompositeType");
		addEEnumLiteral(compositeTypeEEnum, CompositeType.AND);
		addEEnumLiteral(compositeTypeEEnum, CompositeType.OR);

		initEEnum(goalSourceEEnum, GoalSource.class, "GoalSource");
		addEEnumLiteral(goalSourceEEnum, GoalSource.PROVIDED_GOALS);
		addEEnumLiteral(goalSourceEEnum, GoalSource.REQUEST_GOALS);

		initEEnum(actionTypeEEnum, ActionType.class, "ActionType");
		addEEnumLiteral(actionTypeEEnum, ActionType.SATISFIES);
		addEEnumLiteral(actionTypeEEnum, ActionType.PASSES);

		initEEnum(modificationTypeEEnum, ModificationType.class, "ModificationType");
		addEEnumLiteral(modificationTypeEEnum, ModificationType.ADD_FACT);
		addEEnumLiteral(modificationTypeEEnum, ModificationType.REMOVE_FACT);
		addEEnumLiteral(modificationTypeEEnum, ModificationType.ADD_GOAL);
		addEEnumLiteral(modificationTypeEEnum, ModificationType.REMOVE_GOAL);

		initEEnum(modifiablePredicateEEnum, ModifiablePredicate.class, "ModifiablePredicate");
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.PR_SATISFIES);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.PR_PASSES);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.PR_AND_DECOMPOSES2);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.PR_AND_DECOMPOSES3);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.PR_OR_DECOMPOSES2);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.PR_OR_DECOMPOSES3);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.REQUESTS);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.CAN_PROVIDE);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.AND_SUBGOAL2);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.AND_SUBGOAL3);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.OR_SUBGOAL2);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.OR_SUBGOAL3);
		addEEnumLiteral(modifiablePredicateEEnum, ModifiablePredicate.SATISFIED);

		initEEnum(propertyModificationTypeEEnum, PropertyModificationType.class, "PropertyModificationType");
		addEEnumLiteral(propertyModificationTypeEEnum, PropertyModificationType.ASSIGN);
		addEEnumLiteral(propertyModificationTypeEEnum, PropertyModificationType.INCREASE);
	}

} //EventPackageImpl
